<?php
declare (strict_types=1);
namespace app\admin\validate\market\ticket;

use think\Validate;

/**
 * 活动数据验证
 */
class Ticket extends Validate
{
    /**
     * 定义验证规则
     * 格式：'字段名'    =>    ['规则1','规则2'...]
     *
     * @var array
     */
    protected $rule = [
        'id'               => 'require',
        'title'            => 'checkTitle|unique:market_ticket',
        'pid'              => 'checkTitle|number',
        'target_user_type' => 'require|number',
        'issue_no'         => 'require|length:1,100',

    ];

    /**
     * 定义错误信息
     * 格式：'字段名.规则名'    =>    '错误信息'
     *
     * @var array
     */
    protected $message = [
        'id'               => '操作错误',
        'title.checkTitle' => '请选择往期活动或输入活动名称',
        'title.unique'     => '活动名称已存在',
        'pid.checkTitle'   => '请选择往期活动或输入活动名称',
        'pid.number'       => '操作错误',
        'target_user_type' => '操作错误',
        'issue_no.require' => '请输入活动期号',
        'issue_no.length'  => '活动期号为1-100个字符',
    ];

    /**
     * 验证场景
     */
    protected $scene = [
        'create' => ['title', 'pid', 'target_user_type', 'issue_no'],
        'edit'   => ['id', 'title', 'target_user_type', 'issue_no'],
    ];

    /**
     * 验证活动名称或选择往期活动
     *
     * @param $value
     * @param $rule
     * @param $data
     * @return bool|string
     */
    protected function checkTitle($value, $rule, $data)
    {
        $pid = $data['pid'] ?? 0;
        if ($pid <= 0 && !$data['title']) {
            return '请选择往期活动或输入活动名称';
        }

        if ($data['title_type'] == 1 && !$data['title']) {
            return '请输入活动名称';
        } else if ($data['title_type'] == 2 && $pid <= 0) {
            return '请选择往期活动';
        }

        return true;
    }

}
